#pragma once
/**
 * 页面动画相关
 */
#include "lvgl/lvgl.h"

/* 页面转场动画类型 */ 
typedef enum
{
	/* 默认动画 */ 
	LOAD_ANIM_DEFAULT = 0,

	/* 新页面覆盖旧页面 */
	LOAD_ANIM_OVER_LEFT,
	LOAD_ANIM_OVER_RIGHT,
	LOAD_ANIM_OVER_TOP,
	LOAD_ANIM_OVER_BOTTOM,

	/* 新页面入栈 */
	LOAD_ANIM_MOVE_LEFT,
	LOAD_ANIM_MOVE_RIGHT,
	LOAD_ANIM_MOVE_TOP,
	LOAD_ANIM_MOVE_BOTTOM,

	/* 新页面fade in 老页面fade out  */
	LOAD_ANIM_FADE_ON,

	/* 无动画 */
	LOAD_ANIM_NONE,

	LOAD_ANIM_LAST = LOAD_ANIM_NONE

} anim_type_em;

/* 转场动画属性 */
typedef struct
{
	anim_type_em type;      // 动画类型
	uint16_t time;          // 持续时间
	lv_anim_path_cb_t path; // 动画效果

} anim_attr_t; 

/* 动画状态 */
typedef struct
{
	bool isEnter;      // 是否是入场动画
	bool isBusy;       // 动画是否正在播放
	anim_attr_t attr;  // 动画属性

} anim_state_t;

/* 动画setter, getter函数 */
typedef void   (*lv_anim_setter_t)(void*, int32_t);
typedef int32_t(*lv_anim_getter_t)(void*);

/* 动画的起始位置（沿着同一个轴）*/ 
typedef struct
{
	int32_t start; // 起始位置
	int32_t end;   // 结束位置

} anim_position_t;

/* 动画位置 */
typedef struct
{
	anim_position_t entry; // 入场部分	
	anim_position_t exit;  // 退场部分

} anim_value_t;

/* 页面拖动方向 */
typedef enum
{
	PAGE_DRAG_DIR_NONE,
	PAGE_DRAG_DIR_HOR,
	PAGE_DRAG_DIR_VER,

} page_drag_dir_t;

/* 页面动画属性 */
typedef struct
{
	lv_anim_setter_t setter;
	lv_anim_getter_t getter;
	page_drag_dir_t dragDir;
	anim_value_t push;
	anim_value_t pop;

} page_anim_attr_t;
